/*spring依赖配置很繁琐
springboot是对spring进行简化开发
原因是springboot底层有起步依赖和自动配置
springboot的原理就是起步依赖和自动装配的原理

spring要自己引入依赖很可能版本冲突而且很多麻烦
起步依赖：springboot只需要引入一个依赖即可，依靠原理是maven的依赖传递

自动配置:  spring容器启动后一些配置类bean对象就自动存入ioc容器中，不需要我们手动声明，简化开发，省去繁琐配置
原本我们只有controller，service，dao等我们手动配置的bean，现在除了这些，spring容器还将一些常用的类做成bean给我们使用



@Configuration注解的底层里有@Component
springboot的单元测试注解@springbootTest
@SpringBootApplication配置注解自带包扫描的作用，但是只能扫当前包及其子包
自动配置

1. 自动配置原理

方法一

覆盖扫描，扫描定义包中被定义为bean的对象

![](C:\Users\20520\AppData\Roaming\Typora\typora-user-images\image-20241012183546267.png)

所以我手动配置@ComponentScan来分别扫描本包和第三方包

从新扫描本包的原因是覆盖了@SpringBootApplication的扫描

这个方式很繁琐

![image-20241012190231994](C:\Users\20520\AppData\Roaming\Typora\typora-user-images\image-20241012190231994.png)

方法二

@Import可以注入你需要的类，他不需要是一个bean，只需要给字节码文件，springboot可以反射得到他的bean

@Import注解导入，但是一般你并不知道导入什么bean你需要什么，但是第三方知道，你只需要调用第三方给你的注解一般叫做@Enablexxxx由第三方提供，这个注解里面封装了一个import，可以由第三方导入普通类，配置类，ImportSelector(他的接口实现类里面会实现一个的方法会定义需要的bean类)

知道原理了，我们要思考如何运用原理实现自动配置，通过源码跟踪，springboot过于庞大，所以要通过springboot启动类开始跟踪才方便，上面定义的springbootApplication是springboot最重要注解

@Target定义注解使用范围，类，方法等

@springbootApplication里面封装了@springbootconfiguration,@componentScan,@EnableAutoConfiguration其他都是元注解

![image-20241012202303895](C:\Users\20520\AppData\Roaming\Typora\typora-user-images\image-20241012202303895.png)

@SpringBootConfiguration注解里面封装了@Configuration

![image-20241012202507741](C:\Users\20520\AppData\Roaming\Typora\typora-user-images\image-20241012202507741.png)

@Indexed加速应用启动没用

所以我们启动类也有配置类作用可以在他的下面配置第三方bean

@componentScan所以可以包扫描

@EnableAutoConfiguration就是自动配置核心注解，里面核心是@import

@import里面有一个importselector的实现类

![image-20241012202923033](C:\Users\20520\AppData\Roaming\Typora\typora-user-images\image-20241012202923033.png)



springboot还整合Knife4接口文档自动生成接口文档，swagger的

自动注入的另外一种格式

@RequiredArgsConstructor

 private final IUserService userService;

## javaweb P193多来看
*/